perm filename SDEBUG.LSP[SCH,LSP] blob sn#688840 filedate 1982-11-14 generic text, type T, neo UTF8
;;; -*- LISP -*-

(HERALD SDEBUG "")

;;;; Debugger support
;;;  Primitive procedures for crawling around inside of mucode data
;;;   structures such as continuations, environments, and histories.
;;; 
;;;
;;; Continuations


(DEFUN-IMPORT CALLING-CONTINUATION (CONTINUATION)
  (LET ((NAME (CONT-NAME CONTINUATION)))
    (IF (MEMQ NAME '(DONE UNCONTINUABLE))
	NIL	  
	(LET ((SAVED-RACKS (GET NAME 'RACKS)))		;actually CAR is it
	  (IF (MEMQ NAME '())
	      (PRINT "Warning: continuation may not be proceeded"))
	  (IF (NOT (NULL SAVED-RACKS))
	      (LET ((SI (NOINTERRUPT T)))
		(PROG1 (LET ((*THE-REGISTERS NIL)
			     (*THE-STACKS NIL)
			     (*FREE-MARKS NIL)
			     (*RACK-STATS NIL))
			 (RESET-RACKS)
			 (RESTORE-CONTROL-POINT CONTINUATION)
			 (MAPC '(LAMBDA (RACK-NAME)
				  (EVAL `(RESTORE ,RACK-NAME)))
			       (CAR SAVED-RACKS))
			 (RESTORE CONT)
			 (MAKE-CONTROL-POINT))
		       (NOINTERRUPT SI)))
	      (BUG-SCHEME-ERROR "Bad continuation code -- no racks declared"
				NAME))))))

(DEFUN-IMPORT CONTINUATION-ENVIRONMENT (CONTINUATION)
  (IF (REGISTER-SAVED? 'ENV CONTINUATION)
      (LET ((SI (NOINTERRUPT T)))
	(PROG1 (LET ((*THE-REGISTERS NIL)
		     (*THE-STACKS NIL)
		     (*FREE-MARKS NIL)
		     (*RACK-STATS NIL))
		 (RESET-RACKS)
		 (RESTORE-CONTROL-POINT CONTINUATION)
		 (RESTORE ENV)
		 (FETCH ENV))
	       (NOINTERRUPT SI)))
      'NO-ENVIRONMENT-SAVED))

(DEFUN REGISTER-SAVED? (REG CP)
  (LET ((RACKS (GET (CONT-NAME CP) 'RACKS)))
    (IF RACKS
	(MEMQ REG (CAR RACKS))
	(BUG-SCHEME-ERROR "Missing RACKS declaration for this continuation"
			  (CONT-NAME CP)))))

(DEFUN CONT-NAME (CP)
  (SUBR-NAME (CAR (CONTROL-POINT-CONT CP))))